package state_jss.exambook;

import state_jss.exambook.states.*;

public class GumballMachine {
	State soldOutState;
	State soldState;
	State noQuarterState;
	State hasQuarterState;
	
	State state = soldOutState;/* 상태인스턴스 변수 (초기값은 soldOut)*/
	int count = 0; /*인스턴스변수에 알맹이 갯수를 저장함*/
	
	public GumballMachine(int numberGumballs){ /*알맹이 초기 개수를 인자로 받아서 인스턴스변수에 저장함.*/
		this.count =numberGumballs;
		
		soldOutState = new SoldOutState(this);
		soldState = new SoldState(this);
		noQuarterState = new NoQuarterstate(this);
		hasQuarterState = new HasQuarterState(this);
		
		if(count > 0) {  /*알맹이 개수가 0 이상이면 ..*/
			state = noQuarterState;
		}
		
	}
	
	public void insertQuarter(){
		state.insertQuarter();
	}
	public void ejectQuarter(){
		state.ejectQuarter();
	}
	public void turnCrank(){
		state.turmCreank();
		state.dispense();
	}
	public void setState(State state){ /*이안에 들어있는 State 객체를 비롯한 다른 객체에서 뽑기 기계의 상태를 다른 상태로 전환시킬 수 있음.*/
		this.state = state;
	}
	public void releaseBall(){
		System.out.println("A gumball comes rolling out the slot...");
		if(count != 0){
			count = count -1; /*알맹이를 내보내고 count 인스턴스 변수의 값을 1 줄이기 위한 보조 메소드*/
		}
	}

	public State getHasQuarterState() {
		// TODO Auto-generated method stub
		return this.hasQuarterState;
	}

	public State getSoldState() {
		// TODO Auto-generated method stub
		return this.soldState;
	}

	public int getCount() {
		// TODO Auto-generated method stub
		return this.count;
	}

	public State getSoldOutState() {
		// TODO Auto-generated method stub
		return this.soldOutState;
	}
	
	
	

}
